﻿namespace CSharpPro._10._16;

public class Demo1
{
    //第一题
    static void Text1()
    {
        Console.WriteLine("请输入三个整数，用空格分隔：");
        string[] input = Console.ReadLine().Split(' ');
        int x = int.Parse(input[0]);
        int y = int.Parse(input[1]);
        int z = int.Parse(input[2]);

        int temp;
        if (x > y)
        {
            temp = x;
            x = y;
            y = temp;
        }

        if (x > z)
        {
            temp = x;
            x = z;
            z = temp;
        }

        if (y > z)
        {
            temp = y;
            y = z;
            z = temp;
        }
        Console.WriteLine("从小到大排序结果为");
        Console.WriteLine($"{x} {y} {z}");

    }
    //第二题
    static void Text2()
    {
        int sum = 0;
        
        Console.WriteLine("1-100之间所有不是7的倍数且不包含7的数字：");
        
        for (int i = 1; i <= 100; i++)
        {
            // 检查是否是7的倍数
            bool isMultipleOf7 = i % 7 == 0;
            
            
            bool contains7 = (i % 10 == 7) || (i / 10 == 7);
            
            
            if (!isMultipleOf7 && !contains7)
            {
                Console.Write(i + " ");
                sum += i;
            }
        }
        
        Console.WriteLine("\n\n这些数字的总和是：" + sum);
    }
    //第三题
    static void Text3()
    {
        for (int i = 1; i <= 9; i++)
        {
            // 内层循环控制被乘数（列数）
            for (int j = 1; j <= i; j++)
            {
                // 格式化输出，确保对齐
                Console.Write($"{j}×{i}={i*j}\t");
            }
            // 每行结束后换行
            Console.WriteLine();
        }
    }
    //第四题
    static void Text4()
    {
        static void Main()
        {
            Console.WriteLine("1000以内的完数有：");
        
            // 遍历1到1000的所有数
            for (int num = 2; num <= 1000; num++)
            {
                // 获取当前数的所有真因子
                List<int> factors = GetProperFactors(num);
            
                // 计算真因子之和
                int sum = 0;
                foreach (int factor in factors)
                {
                    sum += factor;
                }
            
                // 判断是否为完数
                if (sum == num)
                {
                    Console.Write(num + " (因子：");
                    Console.Write(string.Join(", ", factors));
                    Console.WriteLine(")");
                }
            }
        }
    
        // 获取一个数的所有真因子（除自身外的所有因数）
        static List<int> GetProperFactors(int number)
        {
            List<int> factors = new List<int>();
        
            // 1是所有大于1的数的真因子
            if (number > 1)
            {
                factors.Add(1);
            }
        
            // 查找其他真因子
            for (int i = 2; i <= number / 2; i++)
            {
                if (number % i == 0)
                {
                    factors.Add(i);
                }
            }
        
            return factors;
        }
    }
    //第五题
    static void Text5()
    {
        try
        {
            // 接收用户输入
            Console.Write("请输入一个正整数：");
            string input = Console.ReadLine();
            
            // 验证输入是否为正整数
            if (int.TryParse(input, out int number) && number > 0)
            {
                // 1. 判断是几位数
                int digitCount = input.Length;
                Console.WriteLine($"这是一个{digitCount}位数");
                
                // 2. 逆序打印各位数字
                Console.Write("逆序打印各位数字：");
                for (int i = input.Length - 1; i >= 0; i--)
                {
                    Console.Write(input[i] + " ");
                }
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine("输入无效，请输入一个正整数。");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生错误：{ex.Message}");
        }
    }
    //第六题
    static void Text6()
    {
        try
        {
            // 接收用户输入
            Console.Write("请输入一个正整数：");
            string input = Console.ReadLine();
            
            // 验证输入是否为正整数
            if (int.TryParse(input, out int number) && number > 0)
            {
                // 1. 判断是几位数
                int digitCount = input.Length;
                Console.WriteLine($"这是一个{digitCount}位数");
                
                // 2. 逆序打印各位数字
                Console.Write("逆序打印各位数字：");
                for (int i = input.Length - 1; i >= 0; i--)
                {
                    Console.Write(input[i] + " ");
                }
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine("输入无效，请输入一个正整数。");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生错误：{ex.Message}");
        }
    }
}